"""
    位置参数：调用函数时根据函数定义的参数位置来传递参数
"""


def user_info(name, age, gender):
    print(f"您的姓名是：{name}，年龄是：{age}，性别是：{gender}")


user_info("小美", 16, "女")

"""
    关键字参数：函数调用时通过“键=值”形式传递参数.
    作用: 可以让函数更加清晰、容易使用，同时也清除了参数的顺序需求.
    注意：函数调用时，如果有位置参数时，位置参数必须在关键字参数的前面，但关键字参数之间不存在先后顺序
"""
user_info(name="小帅", age=18, gender="男")
user_info(age=18, gender="男", name="小帅")
user_info("小帅", gender="男", age=18)

"""
    缺省参数：缺省参数也叫默认参数，用于定义函数，为参数提供默认值，调用函数时可不传该默认参数的值
        （注意：所有位置参数必须出现在默认参数前，包括函数定义和调用）.
    作用: 当调用函数时没有传递参数, 就会使用默认是用缺省参数对应的值.
    注意：函数调用时，如果为缺省参数传值则修改默认参数值, 否则使用这个默认值
"""


def user_info(name, age, gender="男"):
    print(f"您的姓名是：{name}，年龄是：{age}，性别是：{gender}")


user_info("小花", 20)
user_info("小花", 20, "女")

"""
    不定长参数：不定长参数也叫可变参数. 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景.
    作用: 当调用函数时不确定参数个数时, 可以使用不定长参数
    不定长参数的类型:
        ①位置传递
        ②关键字传递
"""


# ①位置传递
def user_info(*args):
    print(args)


user_info("Tom")
user_info("Tom", 18)


# ②关键字传递
def user_info(**kwargs):
    print(kwargs)


user_info(name="Tom", age=18, id=1001)
